home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’97 / Warrior’s Progress / source code / Source / Libraries / Drawing / PointObject.cp < prev    next >
Encoding:
Text File  |  1997-06-28  |  2.6 KB  |  132 lines  |  [TEXT/CWIE]

  1. // PointObject.cp
  2.  
  3. #ifndef PointObject_h
  4. #include "PointObject.h"
  5. #endif
  6. #ifndef MinMax_h
  7. #include "MinMax.h"
  8. #endif
  9. #ifndef Assert_h
  10. #include "Assert.h"
  11. #endif
  12. #ifndef Sign_h
  13. #include "Sign.h"
  14. #endif
  15.  
  16. const PointObject PointObject::zero( 0, 0 );
  17.  
  18. const PointObject PointObject::up( 0, maxint16 );
  19. const PointObject PointObject::left( maxint16, 0 );
  20. const PointObject PointObject::down( 0, minint16 );
  21. const PointObject PointObject::right( minint16, 0 );
  22.  
  23. const PointObject PointObject::upLeft( maxint16, maxint16 );
  24. const PointObject PointObject::upRight( minint16, maxint16 );
  25. const PointObject PointObject::downLeft( maxint16, minint16 );
  26. const PointObject PointObject::downRight( minint16, minint16 );
  27.  
  28. void PointObject::BeAboveLeftOf( PointObject r )
  29.   {
  30.     h = Max( h, r.h );
  31.     v = Max( v, r.v );
  32.   }
  33.  
  34. void PointObject::BeBelowLeftOf( PointObject r )
  35.   {
  36.     h = Max( h, r.h );
  37.     v = Min( v, r.v );
  38.   }
  39.  
  40. void PointObject::BeAboveRightOf( PointObject r )
  41.   {
  42.     h = Min( h, r.h );
  43.     v = Max( v, r.v );
  44.   }
  45.  
  46. void PointObject::BeBelowRightOf( PointObject r )
  47.   {
  48.     h = Min( h, r.h );
  49.     v = Min( v, r.v );
  50.   }
  51.  
  52. void PointObject::operator+=( PointObject r )
  53.   {
  54.     Assert( CanAdd( h, r.h ) );
  55.     Assert( CanAdd( v, r.v ) );
  56.     h += r.h;
  57.     v += r.v;
  58.   }
  59.  
  60. void PointObject::operator-=( PointObject r )
  61.   {
  62.     Assert( CanSubtract( h, r.h ) );
  63.     Assert( CanSubtract( v, r.v ) );
  64.     h -= r.h;
  65.     v -= r.v;
  66.   }
  67.  
  68. void PointObject::operator*=( int16 n )
  69.   {
  70.     Assert( CanMultiply( h, n ) );
  71.     Assert( CanMultiply( v, n ) );
  72.     h *= n;
  73.     v *= n;
  74.   }
  75.  
  76. void PointObject::operator/=( int16 n )
  77.   {
  78.     Assert( n != 0 );
  79.     h /= n;
  80.     v /= n;
  81.   }
  82.  
  83. PointObject PointObject::operator-() const
  84.   {
  85.     Assert( h != minint16 );
  86.     Assert( v != minint16 );
  87.     return PointObject( - h, -v );
  88.   }
  89.  
  90. PointObject PointObject::operator+( PointObject r ) const
  91.   {
  92.     Assert( CanAdd( h, r.h ) );
  93.     Assert( CanAdd( v, r.v ) );
  94.     return PointObject( h + r.h, v + r.v );
  95.   }
  96.  
  97. PointObject PointObject::operator-( PointObject r ) const
  98.   {
  99.     Assert( CanSubtract( h, r.h ) );
  100.     Assert( CanSubtract( v, r.v ) );
  101.     return PointObject( h - r.h, v - r.v );
  102.   }
  103.  
  104. PointObject PointObject::operator*( int16 n ) const
  105.   {
  106.     Assert( CanMultiply( h, n ) );
  107.     Assert( CanMultiply( v, n ) );
  108.     return PointObject( h * n, v * n );
  109.   }
  110.  
  111. PointObject PointObject::operator/( int16 n ) const
  112.   {
  113.     Assert( n != 0 );
  114.     return PointObject( h / n, v / n );
  115.   }
  116.  
  117. uint32 PointObject::NormSquared() const
  118.   {
  119.     return uint32(h) * uint32(h) + uint32(v) * uint32(v);
  120.   }
  121.  
  122. uint32 PointObject::TaxicabNorm() const
  123.   {
  124.     return Abs( uint32(h) ) + Abs( uint32(v) );
  125.   }
  126.  
  127. uint32 PointObject::TaxicabDistanceTo( Point p ) const
  128.   {
  129.     return Abs( int32(h) - int32( p.h ) )
  130.           + Abs( int32(v) - int32( p.v ) );
  131.   }
  132.